SQLコマンド (INSERT,SELECT,UPDATE,DELETE,トランザクション)
- 便利な関数もまとめてる。
# INSERTコマンド :テーブルにデータを登録
- insert into テーブル名 (列名1 [, 列名2 …] ) VALUES (入れたい値1 [, 値2 …] );
[]は省略できる部分。
例: insert into posts (title, body) values (‘title1’,‘body11111’);
(titleというフィールドにtitle1という値、bodyというタイトルにbody11111を登録する)
# SELECTコマンド :必要なデータを検索し、取り出せる
- SELECT 列名, … FROM テーブル名;
- すべてのカラム(列)を取り出す:select * from テーブル名
- 一部のカラム(列)を取り出す:select <カラム名> from <テーブル名>
- 複数のテーブルを扱いたい
例:2つのテーブルusersとposts。usersのidとpostsのuser_idが結びついている(taguchiさんが書いたブログ記事がtitle1)
- 複数扱うときは、テーブル名.カラム名と書く
https://gyazo.com/6d507d71b953f50e80040bf3891f5fb1
- やりたいこと:誰がどの記事を書いたか取り出したい
select users.name, posts.title from users,posts where users.id = posts.user_id;
もっと短くかける
blogapp=# select u.name, p.title from users u,posts p where u.id = p.user_id;
https://gyazo.com/5c6fdc94e1b7edcb89cb9734bc87d98e
✰オプション
- 拡張表示のon/off:\x
https://gyazo.com/0a6cb0ceeef708afbe47bcaf80229d49
【句リスト】
- WHERE
- LIKE
- ORDER BY
- LIMIT
- OFFSET
集計したレコードに使う
- GROUP BY
- HAVING
✰WHERE:取り出すときの条件を指定できる
- select <フィールド> from <テーブル> where <抽出したい条件>
例:select * from users where score > 4.0 (scoreの数値が4.0より大きいという条件で、usersテーブルの全カラムを取り出す)
例:select * from users where name = ‘taguchi’(nameが'taguchi'のものだけを抽出したい)
✰LIKE:対象のカラムに対して文字列検索
- like <検索したい文字列>
- 任意の文字0文字以上:%
- 任意の文字1文字以上:_
例
https://gyazo.com/88c5bf9844b24559c1307231609ced56
✰ORDER BY : レコード(行)の並び替え
- order by <カラム名>
- カラムのデータが数値の場合、小さい順になる
https://gyazo.com/7a65910bae93e0b685594c56898fa848
- 大きい順にしたい:descを付ける
https://gyazo.com/476f60c06a421fbba816579b5f5abc21
- 複数の条件をつけられる
https://gyazo.com/4b7555dd56c9e96693a4983e4ac119d8
✰LIMIT : 取得するデータの行数の上限を設定 / ✰OFFSET:取り出す開始位置を指定
- LIMIT <取り出す数>
例:2つだけ取り出す
https://gyazo.com/78623755879913d68b4780dd491001e4
- OFFSETの開始位置は、1番目が0(Rubyのインデックスと同じ)
offset 0 = 1番目が開始位置
offset 1 = 2番目が開始位置
https://gyazo.com/faef35104ea469e6c676679ebaca6aea
【レコード(データそのもの/行)の集計に便利な #関数 】 - 使い方:select 関数(カラム名)
- count:数を数えてくれる
例:レコードの件数を知りたい select count(*) from <テーブル>
- distinct:重複した値を除外して取り出したい
- max:一番大きい値
- avg:平均値
- length:文字数
- concat:文字列の連結
concat と上に出るのを変えたい:as <付けたい名前>
https://gyazo.com/b2a8133a5b2a430fa3feab8df44223c8
- substring:取得した文字列のうち、一部の文字だけほしい
書き方:substring(カラム名,開始位置,文字数)
https://gyazo.com/b9c1450b69a291967e3d3e1b25a1a4e9
- random:ランダムに取り出したい
例:ランダムにレコードを1つだけ取り出したい。実行するたびにレコードが変わる。
https://gyazo.com/39c28336f42e0670add0f3b8c2e9cb7b
- GROUP BYとHAVINGは集計したレコードに使う!
✰ GROUP BY :レコード集計したものを、グループごとに取り出したい
例:scoreの合計値を「teamごとに」出したい
https://gyazo.com/32841cbaea7b369b5fe2dc776ce0feeb
✰ HAVING:レコード集計したものに、条件をつけたい
例: チームごとのスコアの合計を集計→そこから更に、スコア合計が10以上のものを取り出したい
= 上記のselect team , sum(score) from users group by teamに、having sum(score) > 10.0; を足す。
https://gyazo.com/1d12a33e621a47e85ccf1c727eae0826
# UPDATEコマンド
- レコードの値を変更できる
- update <テーブル> set <変えたいカラム> = <値> where <レコード> = ‘<変えたいレコード>‘;
例:'服部さき'というnameのageを50に変えたい
https://gyazo.com/167e0cee99d9de06c87437baa1490b81
例:'服部さき'というnameのnameを'Saki'に変えたい
https://gyazo.com/c9429ce3759cc99af559853445411122
例:値を+1増やしたい
https://gyazo.com/8cde3256f5855a629fcff63012350a0c
# DELETEコマンド
- レコードの削除
delete from <テーブル名>ですべて消してしまうので、whereで条件をつける。
例:ageが31より大きいレコードを消す
https://gyazo.com/fbee3b026678e302b5010cf40ec087ce
# トランザクション (commitとrollback)
- トランザクションとは:複数の処理をまとめて行う処理、の仕組み
✰ commit
1. begin;でトランザクション開始
2. SQL文①;
3. SQL文②;
4. commit; :これを打つと、2~3で打ったSQL文の処理が実行される
例
https://gyazo.com/d8d23a5255c5f2d7c8d864ee9e05de49
✰ rollback : commit;しないで、やっぱりやめる!
1. begin;でトランザクション開始
2. SQL文①;
3. SQL文②;
(4. select * from <テーブル名>で、2~3で実行した結果を確認することができる)
5. 結果を見て、やっぱり2~3でやった処理を無かったことにしたい時、rollback;する。
例
https://gyazo.com/d51336836ba05dfb67984414c62a12a4